阅读本文之前,你可能对以下资源帖感兴趣:
MCMC中的Metropolis–Hastings算法与吉布斯采样
蒙特卡洛采样之拒绝采样(Reject Sampling)
LDA-math-MCMC 和 Gibbs Sampling
MCMC 案例学习
R语言与Markov Chain Monte Carlo(MCMC)方法学习笔记(1)
R语言与Markov Chain Monte Carlo(MCMC)方法学习笔记(2)
《Gibbs Sampling for the UniniTiated》阅读笔记
gibbs sampling.ppt
从正态分布说起
假如我们拿到一组正态分布的数据,对它的均值和方差都没有任何信息时。要想得到感兴趣的$\mu$的分布情况,可以用以下三种方法模拟$\mu$的分布:
1 计算$\mu$的边际后验分布
需要将$(\mu,\sigma ^2)$的联合后验分布中的$\sigma^2$积分积掉。简化之后的结果可以得到$\frac{\mu -\overline{x}}{s/\sqrt{n}}|\mathbf{x}\sim t(n-1)$,这说明我们可以生成t分布的随机数,根据已经计算的样本均值$\overline{x}$和样本标准差$s$,可以逆推回去得到$\mu$值,由此可以模拟得到$\mu$的分布情况。
2 分解联合后验分布
其中,$\frac{(n-1)s^2}{\sigma^2}|\mathbf{x}\sim\chi ^2(n-1)$,$(\mu|\sigma^2,\mathbf{x})\sim N(\overline{x},\sigma ^2/n)$.
上面密度函数分解的式子告诉我们,如果得到了$\pi(\sigma^2|\mathbf{x})$的分布,那我们可以从这个分布抽出一个值,固定在这个值下继续抽$\pi(\mu|\sigma^2,\mathbf{x})$分布中的$\mu$值,重复这个过程,生成的$(\mu,\sigma^2)$的分布就是上式的联合分布密度函数。简化之后的抽样步骤为:
从自由度为$n-1$的卡方分布中抽取$Y$,令$\sigma^2=(n-1)s^2/Y$
对给定$\sigma^2$,从正态分布$N(\overline{x},\sigma^2/n)$抽取$\mu$
重复上述过程,可以得到$(\mu,\sigma^2)$的后验样本,根据后验样本就可以画出直方图和得到分布的其他特征了。
3 计算满条件后验分布
操作步骤如下(算法):
- 设定初值$(\mu^{(0)},(\sigma^2)^{(0)})$
- 从卡方分布$\chi ^2 {(n)}$产生随机数$Y$,并令$(\sigma^2)^{(t+1)}=\frac{(n-1)s^2+n(\bar{x}-\mu^{(t)})^2}{Y}$
- 由正态分布$N(\bar x,(\sigma^2)^{(t+1)}/\sqrt n)$产生$\mu^{(t+1)}$
- 重复步骤2和3,得到后验样本